package com.ctshk.rpc.iotc.service;

import com.ctshk.common.dto.Result;
import com.ctshk.common.model.PageResponse;
import com.ctshk.common.model.TokenUser;
import com.ctshk.rpc.iotc.dto.OperatePromotionListDTO;
import com.ctshk.rpc.iotc.dto.OperatePromotionQueryDTO;
import com.ctshk.rpc.iotc.dto.OperateSeriesTripDTO;
import com.ctshk.rpc.iotc.req.*;

import java.util.List;

/**
 * <p>
 * 推广码 服务类
 * </p>
 *
 * @author 谢诗宏
 * @since 2021-01-22
 */
public interface IOperatePromotionService  {

    /**
     * 新增推广码
     */
    Result add(OperatePromotionAddReq req,TokenUser tokenUser);

    /**
     * 编辑推广码
     */
    Result update(OperatePromotionUpdateReq req,TokenUser tokenUser);

    /**
     * 编辑推广码
     */
    Result updateStatus(CodeStatusReq req,TokenUser tokenUser);

    /**
     * 审核推广码
     */
    Result approvalCode(Long codeId,TokenUser tokenUser);

    /**
     * 查询推广码详情
     */
    Result<OperatePromotionQueryDTO> query(OperatePromotionQueryReq req);

    /**
     * 查询推广码列表
     */
    PageResponse<OperatePromotionListDTO> list(OperatePromotionListReq req, TokenUser tokenUser);

    /**
     * 根据优惠码查询推广码（校检）
     */
    Result<OperatePromotionQueryDTO> queryConform(OperatePromotionConformReq req);

    /**
     * 扣减推广码剩余名额及剩余金额
     */
    Result deduct(OperatePromotionDeductReq req, TokenUser tokenUser);

    /**
     * 扣减推广码剩余名额及剩余金额退回
     */
    Result refund(OperatePromotionRefundReq req, TokenUser tokenUser);

    /**
     * 查询符合业务类型对应的产品ID集合
     */
    List<Long> queryRelationIdList(Integer businessType);

    /**
     * 推广码审核
     *
     * @param req
     * @return
     */
    Result approval(OperateBankApprovalReq req);

    /**
     * 定时任务每分钟被吊起一次，检查所有推广码是否失效（如果有失效置换标记状态）
     * @return
     */
    void reflush();
}
